﻿#define _CRT_SECURE_NO_WARNINGS//杨氏矩阵
//#include<stdio.h>
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int arr[5][5] = { 0 };
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//			arr[i][j] = j + i;
//
//		}
//	}
//
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//
//
//			printf("%d ", arr[i][j]);
//
//
//		}
//		printf("\n");
//	}
//	int a = 0;
//	scanf("%d", &a);
//	for (int i = 0; i < n; i++)
//	{
//		for (int j = 0; j < n; j++)
//		{
//			if (arr[i][j] == a)
//			{
//				printf("是arr[%d][%d]\n", i, j);
//
//			}
//
//		}
//
//	}
//	return 0;
//}
#include <stdio.h>
//杨氏矩阵的算法
int find_num(int arr[3][3], int num, int* px, int* py)
{
	//从右上角开始找
	int x = *px - 1;
	int y = 0;
	//与右上角数组进行比较
	while (x >= 0 && y < *py)
	{
		if (num > arr[x][y])
		{
			y++;//num比右上角的数字大，往下走一行
		}
		else if (num < arr[x][y])
		{
			x--;//num比右上角的数字小，往做走一列
		}
		else
		{
			*px = x;//num的横坐标
			*py = y;//num的纵坐标
			return 1;//相等函数值返回1说明已经找到了
		}
	}
	//函数值返回0说明找不到
	return 0;
}
int main()
{
	//创建一个二维数组将上图数据存储起来
	//  1  |  3  |  6
	//  2  |  5  |  7
	//  4  |  6  |  8
	int arr[3][3] = { { 1, 3, 6 },{ 2, 5, 7 },{4, 6, 8} };
	int x = 3;
	int y = 3;
	int num = 5;
	//用ret接受函数返回值
	int ret = find_num(arr, num, &x, &y);
	if (ret == 1)
	{
		printf("找到了！\n");
		printf("是arr[%d][%d]\n", x, y);
	}
	else
	{
		printf("找不到\n");
	}
	return 0;
}
